[アップデート] Amazon EC2のステータスチェックにEBSボリュームへの到達性チェックが追加されました
しばたです。
先日AWSより「Amazon EC2のステータスチェックにEBSボリュームへの到達性チェックを増やした」旨のアナウンスがありました。
こちら地味に便利な更新ですので本記事で解説したいと思います。
更新内容
更新内容自体は非常にシンプルです。
EC2インスタンス起動時のステータスチェックに従来の「システムステータス」と「インスタンスステータス」に加え「アタッチ済みのEBSステータスチェック」が増えました。
マネジメントコンソールでEC2インスタンスを見るとステータスチェック欄が従来のn/2
からn/3
になっていることが分かります。
さらに「ステータスとアラーム」タブにチェック結果とCloudWatchメトリクスのグラフも追加されました。
チェック対象のメトリクスはそれぞれ以下となります。
チェック対象 | CloudWatchメトリクス |
---|---|
システムステータス | StatusCheckFailed_System |
インスタンスステータス | StatusCheckFailed_Instance |
[NEW!] アタッチ済みのEBSステータス | StatusCheckFailed_AttachedEBS |
また、AWS CLIのaws ec2 describe-instance-status
コマンドからもAttachedEbsStatus
プロパティとして状態を取得できる様になっています。
# AttachedEbsStatus プロパティで EBSステータス を取得可能
$ aws ec2 describe-instance-status --instance-ids i-04de4299ab1e6a247
{
"InstanceStatuses": [
{
"AvailabilityZone": "ap-northeast-1a",
"InstanceId": "i-04de4299ab1e6a247",
"InstanceState": {
"Code": 16,
"Name": "running"
},
"InstanceStatus": {
"Details": [
{
"Name": "reachability",
"Status": "passed"
}
],
"Status": "ok"
},
"SystemStatus": {
"Details": [
{
"Name": "reachability",
"Status": "passed"
}
],
"Status": "ok"
},
"AttachedEbsStatus": {
"Details": [
{
"Name": "reachability",
"Status": "passed"
}
],
"Status": "ok"
}
}
]
}
EBSボリュームへの到達性チェック
StatusCheckFailed_AttachedEBS
メトリクス自体は去年の10月に追加されたものです。
上記ブログにある通り、当時はメトリクスは増えたもののEC2のステータスチェックに組み込まれておらず、EBSの監視をしたい場合は独自に行う必要がありました。
今回の更新でAWS側の標準に組み込まれた形となります。
注意点 : アタッチ済みのEBSステータスチェックができるのはNitroインスタンスのみ
注意点としてStatusCheckFailed_AttachedEBS
メトリクスを取得できるのはNitroインスタンスのみとなります。
このため、非Nitro世代のインスタンスに対するステータスチェックは従来通り「システムステータス」と「インスタンスステータス」の2つのままです。
非Nitroインスタンス(t2.nano)のステータスチェックはn/2のまま
非Nitroインスタンスは StatusCheckFailed_AttachedEBS を取得できないので表示もされない
StatusCheckFailed メトリクスの扱い
続けて既存のStatusCheckFailed
メトリクスの扱いについて検証していきます。
従来StatusCheckFailed
メトリクスはStatusCheckFailed_System
およびStatusCheckFailed_Instance
のいずれかが失敗した際に失敗となるものでしたが、StatusCheckFailed_AttachedEBS
がEC2のステータスチェックに組み込まれたことで変化したのでしょうか?
ドキュメントには
Reports whether the instance has passed all status checks in the last minute.
とあるだけで細かい点までは記載されていませんでした。
このため、AWS Fault Injection Simulator(FIS)でEBSボリュームのI/Oを止めて実際にどうなるか確認してみました。
FIS実験の手順自体は割愛しますが、EBSボリュームのI/Oを止めている間は下図の様にStatusCheckFailed_AttachedEBS
の値が1[1]になりステータスチェックに失敗しました。
EBSステータスチェックに失敗した状態
I/Oを止めたEBSボリュームの状態はこんな感じです。
止めたEBSボリュームの状態
このEC2インスタンスの各種CloudWatchメトリクスから値の変化を確認すると下図の通りでした。
各種メトリクスの変化
結果としてはEBSボリュームのI/O停止中は赤色のStatusCheckFailed_AttachedEBS
の値が1になるも青色のStatusCheckFailed
の値は0のままでした。
StatusCheckFailed
の仕様は従来通り「StatusCheckFailed_System
およびStatusCheckFailed_Instance
のいずれかが失敗した際に失敗する」まま変化ありませんでした。
最後に
以上となります。
地味に嬉しい更新だと思います。
くどい様ですがStatusCheckFailed_AttachedEBS
メトリクスを取得できるのはNitroインスタンスのみですので、古い世代のインスタンスが混在する環境ではステータスチェックの表示も混在するのでそこはご注意ください。
EC2のコンソール画面だと平均値を取っているため値の上昇が勾配を持った形になってしまう... ↩︎